package main

import "fmt"

func main() {
	nums := []int{1, 2, 1, 3, 2, 5}
	fmt.Println(singleNumber(nums))
}

//1.先将所有结果进行异或拿到最终的两个不同数的异或值 例 3^2 =011^010=001
//2.将上一步的异或值与其负数进行与运算拿到最后一位为1的数 1^-1=001^111=001
//3.根据最后一位进行分组 ，采用与运算，若与运算后为0，则一组，否则另外一组
func singleNumber(nums []int) []int {
	temp := 0
	for _, num := range nums {
		temp ^= num
	}
	temp &= -temp
	result := make([]int, 2)
	for _, num := range nums {
		if num&temp == 0 {
			result[0] ^= num
		} else {
			result[1] ^= num
		}
	}
	return result
}
